home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.mactech.com 2010
/
ftp.mactech.com.tar
/
ftp.mactech.com
/
machack
/
Hacks97
/
WarriorsProgress.sit
/
Warrior’s Progress
/
source code
/
Source
/
Libraries
/
Sequence
/
Sequence.cp
next >
Wrap
Text File
|
1997-06-28
|
2KB
|
85 lines
// Sequence.cp
#ifndef Sequence_h
#include "Sequence.h"
#endif
#ifndef SequenceLoop_h
#include "SequenceLoop.h"
#endif
template < class Head, class Node >
Sequence<Head,Node>::Sequence()
: firstLoop( 0 )
{
}
template < class Head, class Node >
Sequence<Head,Node>::~Sequence()
{
Assert( firstLoop == 0 );
}
template < class Head, class Node >
void Sequence<Head,Node>::Register( Loop& loop ) const
{
Assert( &loop.head == this );
loop.nextLoop = firstLoop;
const_cast< Loop *& >( firstLoop ) = &loop;
}
template < class Head, class Node >
void Sequence<Head,Node>::Unregister( Loop& loop ) const
{
Assert( &loop.head == this );
Loop** connection = const_cast< Loop ** >( &firstLoop );
while ( *connection != &loop )
{
Assert( *connection != 0 );
connection = &(*connection)->nextLoop;
}
*connection = loop.nextLoop;
loop.nextLoop = 0;
}
template < class Head, class Node >
void Sequence<Head,Node>::WillRemove( Node& n )
{
for ( Loop *loop = firstLoop;
loop != 0;
loop = loop->nextLoop )
{
if ( loop->position == &n )
{
loop->position = 0;
loop->next = n.Next();
loop->previous = n.Previous();
}
else if ( loop->next == &n )
loop->next = n.Next();
else if ( loop->previous == &n )
loop->previous = n.Previous();
}
}
template < class Head, class Node >
void Sequence<Head,Node>::WillAdd( Node& a, Before, const Node *b )
{
for ( Loop *loop = firstLoop;
loop != 0;
loop = loop->nextLoop )
if ( loop->next == b && loop->Unfinished() )
loop->next = &a;
}
template < class Head, class Node >
void Sequence<Head,Node>::WillAdd( Node& a, After, const Node *b )
{
for ( Loop *loop = firstLoop;
loop != 0;
loop = loop->nextLoop )
if ( loop->previous == b && loop->Unfinished() )
loop->previous = &a;
}